import utils.login_tool as tool


'''
作业：登录注册的案例

- main函数要有，用户自己选择要做的功能，根据选择调用不同的函数
- 用户注册的信息需要使用一个文件存储，登录需要判断用户是否存在，密码是否正确
- 注册的时候，需要发送邮件
'''


def register():
    print("欢迎注册张成阳婚恋介绍所".center(50, '-'))
    name = input("请输入要注册的用户名：")
    # 判断用户是否存在
    all_user_dict = get_all_users()
    # 用户存在就直接结束函数
    if name in all_user_dict:
        print("该用户名已经被使用！！！")
        return None
    # 用户不存在，表示是新用户
    pwd = input("请设置该用户的密码：")

    # 对密码进行md5加密
    pwd = tool.md5_pwd(pwd)


    user_email = input("请输入要注册的邮箱：")
    # 发送邮件
    # 随机生成验证码
    yzm = str(tool.rand_yzm())
    tool.send_email(user_email,yzm)
    user_yzm = input("请输入接收到的验证码：")
    if user_yzm==yzm:
        with open("data/user_info",'a',encoding='UTF-8') as f:
            f.write(f"\n{name},{pwd},{user_email}")
        import time
        # 模拟注册所需要的时间
        time.sleep(3)
        print("用户注册成功！！")


def login():
    print("-" * 50)
    print("欢迎登录张成阳婚恋介绍所".center(50, '-'))
    name = input("请输入您的姓名：")
    # 判断用户是否存在
    all_user_dict = get_all_users()
    # 用户存在就直接结束函数
    if name not in all_user_dict:
        print("该用户名还未注册，请先注册！")
        return None
    # 用户不存在，表示是新用户
    pwd = input("请用户的密码：")
    pwd = tool.md5_pwd(pwd)

    user_email = input("请输入邮箱：")
    # 获取已存储的用户密码
    user_pwd = all_user_dict[name]['pwd']
    if pwd != user_pwd:
        print("您输入的密码不正确！！")
        return None

    # 发送邮件
    # 随机生成验证码
    yzm = str(tool.rand_yzm())
    tool.send_email(user_email, yzm)
    user_yzm = input("请输入接收到的验证码：")
    if user_yzm == yzm:
        import time
        # 模拟注册所需要的时间
        time.sleep(3)
        print("用户登录成功！！")


def cancel():
    print("-" * 50)
    print("正处于注销页面".center(50, '-'))
    name = input("请输入您的姓名：")
    # 判断用户是否存在
    all_user_dict = get_all_users()
    # 用户存在就直接结束函数
    if name not in all_user_dict:
        print("该用户名还未注册，请先注册！")
        return None
    # TODO:自己在这里实现邮件验证码功能

    # 从字典中将该用户移除
    all_user_dict.pop(name)
    f = open("data/user_info",'w',encoding='UTF-8')
    users = list(all_user_dict.items())
    n = 1
    for user in users:
        name = user[0]
        d1 = user[1] # {'pwd':'123456','user_email':'1165872335@qq.com'}
        pwd = d1['pwd']
        user_email = d1['user_email']
        if n==len(users):
            f.write(f"{name},{pwd},{user_email}")
        else:
            f.write(f"{name},{pwd},{user_email}\n")
        n+=1


# 获取所有用户
def get_all_users():
    # 创建一个字典，将来函数结束要返回
    all_user_dict = {}

    f = open("data/user_info", 'r', encoding='UTF-8')
    line_list = f.readlines()
    for line in line_list:
        # 去除每一行的换行符
        # 小虎,123456,1165872335@qq.com
        # {'小虎':{'pwd':'123456','user_email':'1165872335@qq.com'}, ...}
        line = line.strip()
        user_info = line.split(',')
        name = user_info[0]
        pwd = user_info[1]
        user_email = user_info[2]
        user_dict = {'pwd':pwd,'user_email':user_email}
        all_user_dict[name] = user_dict

    # 将所有用户封装的字典进行返回
    return all_user_dict


def init():
    print("欢迎进入张成阳婚恋介绍所".center(50, '-'))
    print("1. 注册")
    print("2. 登录")
    print("3. 注销")
    print("-" * 50)
    choice1 = input("请输入您的选择：")
    if choice1 == '1':
        register()
    elif choice1 == '2':
        login()
    elif choice1 == '3':
        cancel()
    else:
        print("没有您输入的选项！！")


if __name__ == '__main__':
    init()
